# -*- coding:utf-8 -*-


"""
@version: v1.0
@author: 夏伟坤
@Email: 915624876@qq.com
@software: PyCharm
@project: ParsingExcelTables
@file: run_uploadFile.py
@time: 2021/10/22 21:31
"""
import json
import sys
from threading import Thread

import requests
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow

from conf import setting
from core.ui.uploadFile import Ui_MainWindow
from core.utils.file_travel import GetFileInfo  # 遍历目录获取文件信息
from core.utils.log_helper import logger  # 导入logger对象

logger.info("启动自动上传文件应用")

"""
自动上传文件工具.client
1.提供可视化界面
2.选择任意目录
3.选择要上传的文件类型

"""


class MyWindow(Ui_MainWindow, QMainWindow):
    # ui类，初始化
    def __init__(self, MainWindow):
        super().__init__()  # 继承
        logger.info("开始")
        # 本地初始化，通过配置文件获取注册id
        self.registerID = ''
        # 设置logo
        # self.setWindowIcon(QIcon(r'D:\PycharmProjects\ParsingExcelTables\core\bitbug_favicon.ico'))
        self.setupUi(MainWindow)
        self.comboBox.addItems(['excel', 'all'])  # 下拉框添加内容：excel，all
        self.comboBox.currentIndexChanged.connect(self.selectionChange)  # <选择识别文件类型>下拉框改变就获取数据
        self.pushButton.clicked.connect(self.selectDir)  # <选择文件夹>按钮
        self.pushButton_2.clicked.connect(self.confirm)  # <确定上传文件>按钮

    # 下拉框变化
    def selectionChange(self, i):
        for count in range(self.comboBox.count()):
            print('item' + str(count) + '=' + self.comboBox.itemText(count))

        # print('current index', i, 'selection changed', self.comboBox.currentText())

    # 选择文件夹
    def selectDir(self):
        # 选择文件夹，并显示
        directory = QtWidgets.QFileDialog.getExistingDirectory(None, "选取文件夹", "C:/")  # 起始路径
        self.lineEdit.setText(directory)  # 将客户选择的路径显示在编辑栏中
        fileType = self.comboBox.currentText()

        if fileType == 'excel':
            # 获取当前目录下所有的excel文件信息
            excelInfo = GetFileInfo(directory, fileType)
            filepath_list, size = excelInfo
            print(self.comboBox.currentText())
            logger.info("调用签到接口")
            self.api_UF_GetFileInfo(filepath_list, size)

        else:
            logger.info('调用<上传文件至档案系统服务器接口>')
            self.uploadFile_DA()

    # 签到接口
    def api_UF_GetFileInfo(self, filepath_list, size):
        logger.info("调用/api/UF_GetFileInfo接口")
        url = setting.GETFILEINFO_IP + ':' + setting.GETFILEINFO_PORT
        data = {
            'inputjson': filepath_list,
            'size': size
        }
        requests.request("POST", url, data=json.dumps(data))
        return "调用/api/UF_GetFileInfo接口"

    # 调用申请流水接口, 传入注册id，文件名，文件路径，excel文件
    def applyForSerialNumber(self):
        pass

    # 上传文件至汇编服务器
    def uploadFile_HB(self, list, filename):

        def work(filepath):

            filename = filepath.split('\\')[-1]
            files = [
                ('file', (filename, open(filepath, 'rb'),
                          'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))
            ]

            # 字段：1.注册id 2.文件路径 3.文件名 4.
            data = {
                "InputJson": {
                    "RegistrationID": '',  # 出厂设置，本地文件提供一个注册id
                    "Application": [{
                        "Data": {"文件路径": "", "文件名": ""},
                        "OddNumber": '',
                        "ServiceType": '',  # excel表格解析

                    }]
                }
            }
            response = requests.request("POST", url, data=data, files=files)

            print(response.text)
            # 获取流水号

            # 记录在数据库

            #

        url = "http://127.0.0.1:5000/api/OF_UploadFile"  # 配置文件里找

        ll = []
        for i in range(len(list)):
            # print(j)
            pp = Thread(target=work, args=(list[i],))  # 多线程
            ll.append(pp)
            pp.start()
        for pp in ll:
            pp.join()

    # 上传文件至档案系统服务器
    def uploadFile_DA(self, list):
        pass

    # 点击确定
    def confirm(self):  # 确定
        # 确定
        userDir = self.lineEdit.text()  # 获取选择文件夹的目录
        print("选择文件夹的目录:%s" % userDir)  # 获取选择文件夹的目录

        fileType = self.comboBox.currentText()
        print("获取用户选择的文件类型:%s" % fileType)  # 获取用户选择的文件类型

        # 1.搜索目录下的文件 传入参数：目录，文件类型

        # 传入文件夹路径
        # pet = ParsingExcelTables()  # 对象实例化
        # list = pet.getFileInfo(userDir, fileType)  # 获取文件夹里的excel表路径列表
        # if fileType == "excel":
        #     # 上传文件至汇编服务器
        #     self.uploadFile_HB(list, filename)
        # else:
        #     # 上传文件至档案系统服务器
        #     self.uploadFile_DA(list)


# 3.执行
def main():
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    myWindow = MyWindow(MainWindow)
    # myWindow.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    # main()
    print(url)
